package rabbitmq

import (
	"github.com/streadway/amqp"
)

type QueueOpt func(*Queue)

type Queue struct {
	Name       string     // 队列名称，为空时，消息代理会自动生成
	Durable    bool       // 队列是否持久化
	AutoDelete bool       // 消费者退订后即被删除
	Exclusive  bool       // 排他性，队列只被一个连接使用，当连接关闭后队列即被删除
	Args       amqp.Table // 消息代理完成一些类似与TTL的某些额外功能
}

func NewQueue(opts ...QueueOpt) *Queue {
	e := &Queue{
		Durable: true,
	}
	for _, o := range opts {
		o(e)
	}

	return e
}

func QueueName(name string) QueueOpt {
	return func(q *Queue) {
		q.Name = name
	}
}

func QueueDurable(durable bool) QueueOpt {
	return func(q *Queue) {
		q.Durable = durable
	}
}

func QueueAutoDelete(autoDelete bool) QueueOpt {
	return func(q *Queue) {
		q.AutoDelete = autoDelete
	}
}

func QueueExclusive(exclusive bool) QueueOpt {
	return func(q *Queue) {
		q.Exclusive = exclusive
	}
}

func QueueArgs(args map[string]interface{}) QueueOpt {
	return func(q *Queue) {
		q.Args = args
	}
}
